package com.gxc.array;

import java.util.Scanner;

/**
 * 一个图像有n个像素点，存储在一个长度为n的数组img里，每个像素点的取值范围[0,255]的正整数。
 *
 * 请你给图像每个像素点值加上一个整数k（可以是负数），得到新图newImg，使得新图newImg的所有像素平均值最接近中位值128。
 *
 * 请输出这个整数k。
 *
 * 输入描述
 * n个整数，中间用空格分开
 *
 * 备注
 * • 1 <= n <= 100
 * • 如有多个整数k都满足，输出小的那个k；
 * • 新图的像素值会自动截取到[0,255]范围。当新像素值<0，其值会更改为0；当新像素值>255，其值会更改为255；
 *
 * 例如newImg=”-1 -2 256″,会自动更改为”0 0 255″
 *
 * 输出描述
 * 一个整数k
 */
public class PixelPoint {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 创建Scanner对象
        String input_str = sc.nextLine(); // 读取一行输入
        Scanner ss = new Scanner(input_str); // 将输入转换为Scanner对象
        int val, len = 0;
        int[] img = new int[110];
        while (ss.hasNextInt()) { // 判断Scanner对象中是否还有整数
            val = ss.nextInt(); // 读取下一个整数
            img[len++] = val;
        }

        double min = Integer.MAX_VALUE;
        int v = 0;
        for (int k = -127; k < 129; k++) {
            double sum = 0;
            for (int i = 0; i < len; i++) {
                int newImg = img[i] + k;
                newImg = Math.min(255, Math.max(0, newImg));
                sum += newImg;
            }
            double diff = Math.abs(sum / len - 128);
            if (diff<min) {
                min = diff;
                v = k;
            }  else if (diff == min && v != 0) { // 如果diff等于min_diff且k_ans不等于0
                v = Math.min(v, k); // 将k_ans的值更新为k和k_ans中的最小值
            }
        }
        System.out.println(v);
    }

}
